package Controlador;

import Dao.DaoChofer;
import Dao.DaoCooperativa;
import Dao.DaoSocio;
import Modelo.Chofer;
import Modelo.Cooperativa;
import Modelo.Listas;
import Modelo.Socio;
import Vista.JFrameSocio;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ControladorSocio implements ActionListener, KeyListener {

    private boolean Existe;
    private JFrameSocio formSocio;
    //private Listas listaS;

    public ControladorSocio() throws SQLException 
    {
      //  listaS = lisS;
        formSocio = JFrameSocio.getInstance();
        formSocio.agregarListener(this, this);
        formSocio.setVisible(true);
        cargarCoop();
        Enabled(false);
    }
//Falta terminarlo
    private void ExisteCarg() throws SQLException
    {
       Socio coop = Socio.getIntance();
       String cadena, cargo;
       String cargoCombo="";
       String codigoCoop;
       
       cadena = formSocio.getCmbCooperativa().getSelectedItem().toString();
       
        cargoCombo =(String) formSocio.getCmbCargo().getSelectedItem();        
       
        ResultSet registroSocio;
        DaoSocio daoSocio = new DaoSocio();
        registroSocio = daoSocio.ConsultarSocio();
        
        
       //for (int i = 0; i < listaS.getListaSocio().size(); i++)
        while (registroSocio.next())
        {
            //coop = listaS.getListaSocio().get(i);
            cargo=registroSocio.getString("cargo");
            codigoCoop=registroSocio.getString("codigocooperativa");
            
            if (cargo.equals("Presidente") || cargo.equals("Vicepresidente") ||
                    cargo.equals("Tesorero") || cargo.equals("Secretaria"))
            {
                if(codigoCoop.equals(cadena) && cargo.equals(cargoCombo))
                {
                    Mensajes.Aviso("Ya el Cargo Seleccionado ya esta ocupado", "");
                    formSocio.getCmbCargo().requestFocusInWindow();
                    return;
                }
            }
        }
    }
//-------------------------------------------    
    private void ExisteCargo()
    {

    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formSocio.getBtnSalirS())) {
            formSocio.dispose();
        }

        if (e.getSource().equals(formSocio.getBtnBuscarS())) {
            try {
                new ControladorConsulSocio();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorSocio.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (e.getSource().equals(formSocio.getBtnGuardarS())) {
            Grabar();
        }
        if (e.getSource().equals(formSocio.getBtnCancelarS())) {
            Limpiar();
        }
        if (e.getSource().equals(formSocio.getCmbCooperativa())) {
            String cadena;
            cadena = formSocio.getCmbCooperativa().getSelectedItem().toString();
            if(cadena.equals("Seleccione"))
            {
                formSocio.getTxtNomCoop().setText("");
                formSocio.getCmbCargo().setSelectedItem("Seleccione");
            }
            try {
                comboRif();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorSocio.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (e.getSource().equals(formSocio.getCmbCargo()))
        {
            try {
                ExisteCarg();
            } catch (SQLException ex) {
                Logger.getLogger(ControladorSocio.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    @Override
    public void keyTyped(KeyEvent e) 
    {
        if(e.getSource().equals(formSocio.getTxtCedulaS()))
        {
            CedulaKeyTyped(e);
        }
        if(e.getSource().equals(formSocio.getTxtNombreS()))
        {
            NombresKeyTyped(e);
        }   
    }

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getSource().equals(formSocio.getTxtCedulaS())) {
            try {
                CedulakeyPressed(e);
            } catch (SQLException ex) {
                Logger.getLogger(ControladorSocio.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        if (e.getSource().equals(formSocio.getTxtNombreS())) 
        {
            NombreskeyPressed(e);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
    //------------------------------------------

    private void Enabled(boolean Status) {
        formSocio.getTxtCedulaS().setEnabled(!Status);
        formSocio.getTxtNombreS().setEnabled(Status);
        formSocio.getCmbCargo().setEnabled(Status);
        formSocio.getCmbCooperativa().setEnabled(Status);
    }
    //------------------------------------------------------------

    private void cargarCoop() throws SQLException 
    {
        int fila, pos;
        String rif;
        String nom;
        ResultSet registroCoop;
        DaoCooperativa daoCoop=new DaoCooperativa();
       
       registroCoop=daoCoop.ConsultarCooperativa();
       
       
        //for (fila = 0; fila < listaS.getListaCoop().size(); fila++)
       while (registroCoop.next())
        {
            rif = registroCoop.getString("rifc");
            formSocio.getCmbCooperativa().addItem(rif);
            if (registroCoop.getString("rifc").equals(rif)); 
            {
                nom = registroCoop.getString("nombrec");
            }
        }
    }
//---------------------------------------------
    private void comboRif() throws SQLException {
        String cadena;
        int pos;
        cadena = formSocio.getCmbCooperativa().getSelectedItem().toString();
        
        ResultSet registroCoop;
        DaoCooperativa daoCoop=new DaoCooperativa();
        registroCoop=daoCoop.ConsultarCooperativa();
    
        //for (pos = 0; pos < listaS.getListaCoop().size(); pos++) 
        while (registroCoop.next())
        {
            if (registroCoop.getString("rifc").equals(cadena)); 
            {
                formSocio.getTxtNomCoop().setText(registroCoop.getString("nombrec"));
            }
        }
    }
 
    //------------------------------------------------------------

    private void Limpiar() {
        formSocio.getTxtCedulaS().setText("");
        formSocio.getTxtNombreS().setText("");
        formSocio.getCmbCargo().setSelectedItem("Seleccione");
        formSocio.getCmbCooperativa().setSelectedItem("Seleccione");
        formSocio.getTxtNomCoop().setText("");

    }
//---------------------------------------------------------------

    private void Grabar() {
        Socio socio = Socio.getIntance();
        String Cadena;
        ResultSet rgSo;
        DaoSocio daoSoc = new DaoSocio();
                

        Cadena = formSocio.getTxtCedulaS().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Cedula Vacia", "");
            formSocio.getTxtCedulaS().requestFocusInWindow();
            return;
        }

        Cadena = formSocio.getTxtNombreS().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Nombre Vacio", "");
            formSocio.getTxtNombreS().requestFocusInWindow();
            return;
        }
        
        Cadena = formSocio.getCmbCargo().getSelectedItem().toString();
        if (Cadena.equals("Seleccione")) {
            Mensajes.Aviso("Seleccione un Cargo", "");
            formSocio.getCmbCargo().requestFocusInWindow();
            return;
        }
        
        Cadena = formSocio.getCmbCooperativa().getSelectedItem().toString();
        if (Cadena.equals("Seleccione")) {
            Mensajes.Aviso("Seleccione una Cooperativa", "");
            formSocio.getCmbCooperativa().requestFocusInWindow();
            return;
        }
        socio.Socio(formSocio.getTxtCedulaS().getText(),
                formSocio.getTxtNombreS().getText(),
                formSocio.getCmbCargo().getSelectedItem().toString(),
                formSocio.getCmbCooperativa().getSelectedItem().toString());

              daoSoc.Insertar(socio);
      
       
         Existe=false;
        Mensajes.Aviso("Socio guardado con exito", "");
        Limpiar();
        Enabled(false);
        formSocio.getTxtCedulaS().requestFocusInWindow();
    }
//-----------------------------------------
//----eventos keyPressed-------------------
    private void CedulakeyPressed(KeyEvent e) throws SQLException {
        Socio soc = new Socio();
        ResultSet registroSocio;
        DaoSocio daoSocio=new DaoSocio();
        
        if (e.getSource().equals(formSocio.getTxtCedulaS())) {

            String Cadena;
            int Posisocio;
            
            Cadena = formSocio.getTxtCedulaS().getText();

            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 8) {
                Mensajes.Aviso("Cedula invalida", "");
                formSocio.getTxtCedulaS().requestFocusInWindow();
            }
            Existe=false;
            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() == 8) {
                registroSocio = daoSocio.BuscarSocio(Cadena);
                while(registroSocio.next())
                {
                    if(registroSocio.getString("cedula").equals(Cadena)){
                    Existe=true;
                    formSocio.getTxtNombreS().setText(registroSocio.getString("nombre"));
                    formSocio.getCmbCargo().setSelectedItem(registroSocio.getString("cargo"));
                    formSocio.getCmbCooperativa().setSelectedItem(registroSocio.getString("codigocooperativa"));
                    Mensajes.Aviso("Socio ya Existe", "");
                    Enabled(true);
                    Existe=true;
                    Limpiar();
                    return;
                    }
                }
                    formSocio.getTxtNombreS().requestFocusInWindow();
                    Enabled(true);
                    Existe = false;

        }
    }
    }
    
    private void NombreskeyPressed(KeyEvent e) {
        if (e.VK_ENTER == e.getKeyCode()) {
            formSocio.getCmbCooperativa().requestFocusInWindow();
        }
    }
//----fin de los eventos keyPressed----    
//-------------------------------------
//----Eventos keyTyped----    
    private void CedulaKeyTyped(KeyEvent evt) {
        String Cadena;
        char Caracter;

        Cadena = formSocio.getTxtCedulaS().getText();
        if (Cadena.length() == 8) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            if (Caracter == '.') {
                evt.consume();
            }

            if (Caracter < '0' || Caracter > '9') {
                evt.consume();
            }
        }

    }
    //-------------------------------------
    private void NombresKeyTyped(KeyEvent evt) 
    {
        String Cadena;
        String CarString;
        char Caracter;

        Cadena = formSocio.getTxtNombreS().getText();
        if (Cadena.length() == 20) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            CarString = Caracter + "";
            CarString = CarString.toUpperCase();
            Caracter = CarString.charAt(0);

            if (Caracter == ' ') {
                return;
            }

            if (Caracter < 'A' || Caracter > 'Z') {
                evt.consume();
            }

        }
    }
    //-------------------------------------
}